package com.jhgsys.internal.base.service;

import com.jhgsys.internal.base.entity.BaseGoods;
import com.jhgsys.internal.common.entity.QueryRequest;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * 商品表 Service接口
 *
 * @author admin
 * @date 2024-08-06 09:41:04
 */
public interface IBaseGoodsService extends IService<BaseGoods> {
    /**
     * 查询（分页）
     * @author admin
     * @date 2024-08-06 09:41:04
     * @param request QueryRequest
     * @param baseGoods baseGoods
     * @return IPage<BaseGoods>
     */
    IPage<BaseGoods> findBaseGoodsPage(QueryRequest request, BaseGoods baseGoods);


    /**
     * 查询（分页）带数据字典转换
     * @author admin
     * @date 2024-08-06 09:41:04
     * @param request QueryRequest
     * @param baseGoods baseGoods
     * @return IPage<BaseGoods>
     */
    IPage<BaseGoods> findBaseGoodsPageWithDicName(QueryRequest request, BaseGoods baseGoods);

    /**
     * 查询（所有）
     * @author admin
     * @date 2024-08-06 09:41:04
     * @param baseGoods baseGoods
     * @return List<BaseGoods>
     */
    List<BaseGoods> findBaseGoodsList(BaseGoods baseGoods);

    /**
    * 根据ID查询
    * @author admin
    * @date 2024-08-06 09:41:04
    * @param id
    * @return BaseGoods
    */
    BaseGoods findBaseGoodsById(String id);

    /**
     * 新增
     * @author admin
     * @date 2024-08-06 09:41:04
     * @param baseGoods baseGoods
     */
    void createBaseGoods(BaseGoods baseGoods);

    /**
     * 修改
     * @author admin
     * @date 2024-08-06 09:41:04
     * @param baseGoods baseGoods
     */
    void updateBaseGoods(BaseGoods baseGoods);

    /**
     * 逻辑删除
     * @author admin
     * @date 2024-08-06 09:41:04
     * @param baseGoods baseGoods
     * @param baseGoodsIds baseGoodsIds
     */
    void deleteBaseGoods(BaseGoods baseGoods,String baseGoodsIds);

    /**
    * 物理删除
    * @author admin
    * @date 2024-08-06 09:41:04
    * @param baseGoodsIds baseGoodsIds
    */
    void physicallyDeleteBaseGoods(String baseGoodsIds);

    /**
     * 更新库存
     * @param baseGoods
     */
    boolean updateInventory(BaseGoods baseGoods);

    /**
     * 批量更新库存
     * @param baseGoodsList
     */
    boolean updateBatchInventory(List<BaseGoods> baseGoodsList);

    /**
     * 还原锁定库存
     * @param baseGoods
     */
    boolean updateLockInventory(BaseGoods baseGoods);

    /**
     * 批量还原锁定库存
     * @param baseGoodsList
     * @return
     */
    boolean updateBatchLockInventory(List<BaseGoods> baseGoodsList);
}
